package com.zaicheng.cloud;


import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;

import java.io.IOException;

/**
 * Hello world!
 *
 * @author 张在成
 */
@EnableRemoteCallClients
@ComponentScan
public class App {

    public static void main( String[] args ) throws IOException {

        // for循环中遍历所有被@RemoteCallClient注解修饰的类，判断是否是接口，是接口的话
        // 通过结合Spring的FactoryBean的getObject()方法获取代理对象，(基于jdk动态代理)
        // 通过jdk动态代理生成代理对象，执行方法调用的时候，会向服务端发起请求，发起请求的时候会通过负载均衡策略拿到对应的服务，
        // 通过netty将请求数据传递过去,完成响应到客户端
        // 1. 定义方法处理器

        // 2. 定义请求模板RequestTemplate

        // 3. 定义请求对象Request,

        // 4. 整合netty，向其它服务发送请求

        // 5. 定义负载均衡器（不采用Springcloud的Ribbon）

        // 6. 定义负载均衡规则(自定义负载均衡规则，整合nacos和zk)

        // 7. 通过负载均衡器去拉去nacos或者zookeeper的服务列表

        // 8. 选择一台服务，通过netty发送请求，返回响应信息

        // Spring根据类获取类所在的目录包
//        String packageName = ClassUtils.getPackageName(App.class);
//        System.out.println(packageName);

        ApplicationContext context = new AnnotationConfigApplicationContext(App.class);

//        UserService userService = (UserService) context.getBean(UserService.class);
//
//        User userInfo = userService.getUserInfo(1);
//
//        System.out.println(userInfo);

//        System.in.read();
    }
}
